/***************原生对象工类方法****************/
var class2type = {}, toString = Object.prototype.toString;
(function () {
    var typeArr = "Boolean,Number,String,Function,Array,Date,RegExp,Object".split(",");
    for (var i = 0; i < typeArr.length; i++) {
        var name = typeArr[i];
        class2type["[object " + name + "]"] = name.toLowerCase();
    }
})();
/**
 * 返回对象类型
 * @param obj
 * @returns {string}
 */
function check_type (obj) {
    return obj === null ? String(obj) : class2type[toString.call(obj)] || "object";
}
/**
 * 判断对象是否布尔类型
 * @param obj
 * @returns {boolean}
 */
function isBoolean(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'boolean';
}
/**
 * 判断对象是否数值类型
 * @param obj
 * @returns {boolean}
 */
function isNumber(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'number';
}
/**
 * 判断对象是否字符类型
 * @param obj
 * @returns {boolean}
 */
function isString(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'string';
}
/**
 * 判断对象是否函数类型
 * @param obj
 * @returns {boolean}
 */
function isFunction(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'function';
}
/**
 * 判断对象是否数组类型
 * @param obj
 * @returns {boolean}
 */
function isArray(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'array';
}
/**
 * 判断对象是否日期型
 * @param obj
 * @returns {boolean}
 */
function isDate(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'date';
}
/**
 * 判断对象是否正则表达式类型
 * @param obj
 * @returns {boolean}
 */
function isRegExp(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'regexp';
}
/**
 * 判断对象是对象类型
 * @param obj
 * @returns {boolean}
 */
function isObject(obj) {
    return isEmpty(obj) ? false : check_type(obj) === 'object';
}